home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / site-packages / impacket / dcerpc / ndrutils.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2006-06-30  |  15KB  |  440 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. from struct import *
  5. import socket
  6. import random
  7. from impacket import uuid
  8.  
  9. def uuid_hex(_uuid):
  10.     for i in range(0, len(_uuid)):
  11.         print '\\0x%.2x' % unpack('<B', _uuid[i]),
  12.     
  13.     print ''
  14.  
  15.  
  16. def uuid_to_exe(_uuid):
  17.     KNOWN_UUIDS = {
  18.         '\xb9\x99?\x87M\x1b\x10\x99\xb7\xaa\x00\x04\x00\x7f\x07\x01\x00\x00': 'ssmsrp70.dll',
  19.         '\x90,\xfe\x98B\xa5\xd0\x11\xa4\xef\x00\xa0\xc9\x06)\x10\x01\x00': 'advapi32.dll',
  20.         'D\xaf}\x8c\xdc\xb6\xd1\x11\x9aL\x00 \xafn|W\x01\x00': 'appmgmts.dll',
  21.         '\xc0\xebO\xfa\x91E\xce\x11\x95\xe5\x00\xaa\x00Q\xe5\x10\x04\x00': 'autmgr32.exe',
  22.         '\xe0B\xc7O\x10J\xcf\x11\x82s\x00\xaa\x00J\xe6s\x03\x00': 'dfssvc.exe',
  23.         '\x98\xd0\xffk\x12\xa1\x106\x983F\xc3\xf8tS-\x01\x00': 'DHCPSSVC.DLL',
  24.         ' \x17\x82[;\xf6\xd0\x11\xaa\xd2\x00\xc0O\xc3$\xdb\x01\x00': 'DHCPSSVC.DLL',
  25.         '\xfa\x9d\xd7\xd2\x004\xd0\x11\xb4\x0b\x00\xaa\x00_\xf5\x86\x01\x00': 'dmadmin.exe',
  26.         '\xa4\xc2\xabPMW\xb3@\x9df\xeeO\xd5\xfb\xa0v\x05\x00': 'dns.exe',
  27.         '\x908\xa9e\xb9\xfa\xa3C\xb2\xa5\x1e3\n\xc2\x8f\x11\x02\x00': 'dnsrslvr.dll',
  28.         'e1\n\xea4H\xd2\x11\xa6\xf8\x00\xc0O\xa3F\xcc\x04\x00': 'faxsvc.exe',
  29.         'd\x1d\x82\x0c\xfc\xa3\xd1\x11\xbbz\x00\x80\xc7^N\xc1\x01\x00': 'irftp.exe',
  30.         '\xd0\xbb\xf5zc`\xd1\x11\xae*\x00\x80\xc7^N\xc1\x00\x00': 'irmon.dll',
  31.         '@\xb2\x9b \x19\xb9\xd1\x11\xbb\xb6\x00\x80\xc7^N\xc1\x01\x00': 'irmon.dll',
  32.         '\xfb\xee\x0c\x13f\xe4\xd1\x11\xb7\x8b\x00\xc0O\xa3(\x83\x02\x00': 'ismip.dll',
  33.         '\x86\xd4\xdch\x9ef\xd1\x11\xab\x0c\x00\xc0O\xc2\xdc\xd2\x01\x00': 'ismserv.exe',
  34.         '@\xfd,4l<\xce\x11\xa8\x93\x08\x00+.\x9cm\x00\x00': 'llssrv.exe',
  35.         '\xd0LgW\x00R\xce\x11\xa8\x97\x08\x00+.\x9cm\x01\x00': 'llssrv.exe',
  36.         '\xc4\x0c<\xe3\x82\x04\x1a\x10\xbc\x0c\x02`\x8ck\xa2\x18\x01\x00': 'locator.exe',
  37.         '\xf0\x0e\xd7\xd6;\x0e\xcb\x11\xac\xc3\x08\x00+\x1d)\xc3\x01\x00': 'locator.exe',
  38.         '\x14\xb5\xfb\xd3;\x0e\xcb\x11\x8f\xad\x08\x00+\x1d)\xc3\x01\x00': 'locator.exe',
  39.         '\xf0\x0e\xd7\xd6;\x0e\xcb\x11\xac\xc3\x08\x00+\x1d)\xc4\x01\x00': 'locator.exe',
  40.         'xW4\x124\x12\xcd\xab\xef\x00\x01#Eg\x89\xab\x00\x00': 'lsasrv.dll',
  41.         '\x88\xd4\x81\xc6P\xd8\xd0\x11\x8cR\x00\xc0O\xd9\x0f~\x01\x00': 'lsasrv.dll',
  42.         '\xf0\t\x8f\xed\xb7\xce\x11\xbb\xd2\x00\x00\x1a\x18\x1c\xad\x00\x00\x00': 'mprdim.dll',
  43.         '\xe0\xca\x02\xec\xe0\xb9\xd2\x11\xbeb\x00 \xaf\xed\xdfc\x01\x00': 'mq1repl.dll',
  44.         '\x80z\xdfw\x98\xf2\xd0\x11\x83X\x00\xa0$\xc4\x80\xa8\x01\x00': 'mdqssrv.dll',
  45.         '\x10\xca\x8cpi\x95\xd1\x11\xb2\xa5\x00`\x97}\x81\x18\x01\x00': 'mqdssrv.dll',
  46.         '\x805[[\xe0\xb0\xd1\x11\xb9-\x00`\x08\x1e\x87\xf0\x01\x00': 'mqqm.dll',
  47.         '\xe0\x8e Ap\xe9\xd1\x11\x9b\x9e\x00\xe0,\x06L9\x01\x00': 'mqqm.dll',
  48.         '\x80\xa9\x88\x10\xe5\xea\xd0\x11\x8d\x9b\x00\xa0$S\xc37\x01\x00': 'mqqm.dll',
  49.         '\xe0\x0ck\x90\x0b\xc7g\x10\xb3\x17\x00\xdd\x01\x06b\xda\x01\x00': 'msdtcprx.dll',
  50.         '\xf8\x91{Z\x00\xff\xd0\x11\xa9\xb2\x00\xc0O\xb66\xfc\x01\x00': 'msgsvc.dll',
  51.         '\x82\x06\xf7\x1fQ\n\xe80\x07mt\x0b\xe8\xce\xe9\x8b\x01\x00': 'mstask.exe',
  52.         '\xb0R\x8e7\xa9\xc0\xcf\x11\x82-\x00\xaa\x00Q\xe4\x0f\x01\x00': 'mstask.exe',
  53.         ' 2_/&\xc1v\x10\xb5I\x07M\x07\x86\x19\xda\x01\x00': 'netdde.exe',
  54.         'xV4\x124\x12\xcd\xab\xef\x00\x01#Eg\xcf\xfb\x01\x00': 'netlogon.dll',
  55.         '\x18Z\xcc\xf5dB\x1a\x10\x8cY\x08\x00+/\x84&8\x00': 'ntdsa.dll',
  56.         '|Z\xcc\xf5dB\x1a\x10\x8cY\x08\x00+/\x84&\x15\x00': 'ntdsa.dll',
  57.         '5BQ\xe3\x06K\xd1\x11\xab\x04\x00\xc0O\xc2\xdc\xd2\x04\x00': 'ntdsa.dll',
  58.         'p\r\xec\xec\x03\xa6\xd0\x11\x96\xb1\x00\xa0\xc9\x1e\xce0\x01\x00': 'ntdsbsrv.dll',
  59.         ':\xcf\xe0\x16\x04\xa6\xd0\x11\x96\xb1\x00\xa0\xc9\x1e\xce0\x01\x00': 'ntdsbsrv.dll',
  60.         '\xb4Y\xcc\xf5dB\x1a\x10\x8cY\x08\x00+/\x84&\x01\x00': 'ntfrs.exe',
  61.         '\x86\xb1I\xd0O\x81\xd1\x11\x9a<\x00\xc0O\xc9\xb22\x01\x00': 'ntfrs.exe',
  62.         '\x1c\x02\x0c\xa0\xe2+\xd2\x11\xb6x\x00\x00\xf8z\x8f\x8e\x01\x00': 'ntfrs.exe',
  63.         '\xa0\x9e\xc0i\tJ\x1b\x10\xaeK\x08\x00+4\x9a\x02\x00\x00': 'ole32.dll',
  64.         'P8\xcd\x15\xca(\xce\x11\xa4\xe8\x00\xaa\x00a\x16\xcb\x01\x00': 'pgpsdkserv.exe',
  65.         '\xf6\xb85\xd31\xcb\xd0\x11\xb0\xf9\x00`\x97\xbaNT\x01\x00': 'polagent.dll',
  66.         '\xf0\xe4\x9c6\xdc\x0f\xd3\x11\xbd\xe8\x00\xc0O\x8e\xeex\x01\x00': 'profmap.dll',
  67.         '6\x00a "\xfa\xcf\x11\x98#\x00\xa0\xc9\x11\xe5\xdf\x01\x00': 'rasmans.dll',
  68.         '\x01\xd0\x8c3D"\xf11\xaa\xaa\x90\x008\x00\x10\x03\x01\x00': 'regsvc.exe',
  69.         '\x83\xaf\xe1\x1f]\xc9\x11\x91\xa4\x08\x00+\x14\xa0\xfa\x03\x00\x00': 'rpcss.dll',
  70.         '\x84e\n\x0b\x0f\x9e\xcf\x11\xa3\xcf\x00\x80_h\xcb\x1b\x01\x00': 'rpcss.dll',
  71.         '\xb0\x01R\x97\xcaY\xd0\x11\xa8\xd5\x00\xa0\xc9\r\x80Q\x01\x00': 'rpcss.dll',
  72.         '\xe6s\x0c\xe6\xf9\x88\xcf\x11\x9a\xf1\x00 \xafnr\xf4\x02\x00': 'rpcss.dll',
  73.         '\xc4\xfe\xfc\x99`R\x1b\x10\xbb\xcb\x00\xaa\x00!4z\x00\x00': 'rpcss.dll',
  74.         '\x1e$/A*\xc1\xce\x11\xab\xff\x00 \xafnz\x17\x00\x00': 'rpcss.dll',
  75.         '6\x01\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00F\x00\x00': 'rpcss.dll',
  76.         'r\xee\xf3\xc6~\xce\xd1\x11\xb7\x1e\x00\xc0O\xc3\x11\x1a\x01\x00': 'rpcss.dll',
  77.         '\xb8J\x9fM\x1c}\xcf\x11\x86\x1e\x00 \xafn|W\x00\x00': 'rpcss.dll',
  78.         '\xa0\x01\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00x\x00x\x00F\x00\x00': 'rpcss.dll',
  79.         '`\x9e\xe7\xb9R=\xce\x11\xaa\xa1\x00\x00i\x01)?\x00\x00': 'rpcss.dll',
  80.         'xW4\x124\x12\xcd\xab\xef\x00\x01#Eg\x89\xac\x01\x00': 'samsrv.dll',
  81.         '\xa2\x9c\x14\x93;\x97\xd1\x11\x8c9\x00\xc0O\xb9\x84\xf9\x00\x00': 'scesrv.dll',
  82.         '$\xe4\xfbc) \xd1\x11\x8d\xb8\x00\xaa\x00J\xbd^\x01\x00': 'sens.dll',
  83.         'f\x9f\x9bblU\xd1\x11\x8d\xd2\x00\xaa\x00J\xbd^\x02\x00': 'sens.dll',
  84.         '\x81\xbbz6D\x98\xf15\xad2\x98\xf08\x00\x10\x03\x02\x00': 'services.exe',
  85.         '|\xda\x83O\xe8\xd2\x11\x98\x07\x00\xc0O\x8e\xc8P\x02\x00\x00': 'sfc.dll',
  86.         '\xc8O2Kp\x16\xd3\x01\x12xZG\xbfn\xe1\x88\x00\x00': 'sfmsvc.exe',
  87.         'xV4\x124\x12\xcd\xab\xef\x00\x01#Eg\x89\xab\x01\x00': 'spoolsv.exe',
  88.         '\xe0mz\x8c\x8dx\xd0\x11\x9e\xdfDEST\x00\x00\x02\x00': 'stisvc.exe',
  89.         ' e_/F\xcag\x10\xb3\x19\x00\xdd\x01\x06b\xda\x01\x00': 'tapisrv.dll',
  90.         '`\xa7\xa4\\\xb1\xeb\xcf\x11\x86\x11\x00\xa0$T \xed\x01\x00': 'termsrv.exe',
  91.         '"\xc4\xa1M=\x94\xd1\x11\xac\xae\x00\xc0O\xc2\xaa?\x01\x00': 'trksvr.dll',
  92.         '25\x0f0\xcc8\xd0\x11\xa3\xf0\x00 \xafk\n\xdd\x01\x00': 'trkwks.dll',
  93.         '\x12\xfc\x99`\xff>\xd0\x11\xab\xd0\x00\xc0O\xd9\x1aN\x03\x00': 'winfax.dll',
  94.         '\xc0\xe0M\x89U\r\xd3\x11\xa3"\x00\xc0O\xa3!\xa1\x01\x00': 'winlogon.exe',
  95.         '(,\xf5E\x9f\x7f\x1a\x10\xb5+\x08\x00+.\xfa\xbe\x01\x00': 'wins.exe',
  96.         '\xbf\t\x11\x81\xe1\xa4\xd1\x11\xabT\x00\xa0\xc9\x1e\x9bE\x01\x00': 'wins.exe',
  97.         '\xa0\xb3\x02\xa0\xb7\xc9\xd1\x11\xae\x88\x00\x80\xc7^N\xc1\x01\x00': 'wlnotify.dll',
  98.         '\xd1Q\xa9\xbf\x0e/\xd3\x11\xbf\xd1\x00\xc0O\xa3I\n\x01\x00': 'aqueue.dll',
  99.         '\x80x"\xad\x82k\x03\xcf\x11\x97,\x00\xaa\x00h\x87\xb0\x02\x00': 'infocomm.dll',
  100.         'p]\xfb\x8c\xa41\xcf\x11\xa7\xd8\x00\x80_H\xa15\x03\x00': 'smtpsvc.dll',
  101.         '\x80B\xad\x82k\x03\xcf\x11\x97,\x00\xaa\x00h\x87\xb0\x02\x00': 'infoadmn.dll',
  102.         '\x00\xb9\x99?\x87M\x1b\x10\x99\xb7\xaa\x00\x04\x00\x7f\x07\x01\x00': 'ssmsrpc.dll - Microsoft SQL Server',
  103.         '`\xf4\x82O!\x0e\xcf\x11\x90\x9e\x00\x80_H\xa15\x04\x00': 'nntpsvc.dll',
  104.         '\xc0G\xdf\xb3Z\xa9\xcf\x11\xaa&\x00\xaa\x00\xc1H\xb9\t\x00': 'mspadmin.exe - Microsoft ISA Server',
  105.         '\x1f\xa77!^\xbb)N\x8e~.F\xa6h\x1d\xbf\t\x00': 'wspsrv.exe - Microsoft ISA Server',
  106.         '\xf8\x91{Z\x00\xff\xd0\x11\xa9\xb2\x00\xc0O\xb6\xe6\xfc\x01\x00': 'msgsvc.dll' }
  107.     if KNOWN_UUIDS.has_key(_uuid):
  108.         return KNOWN_UUIDS[_uuid]
  109.     else:
  110.         return 'unknown'
  111.  
  112.  
  113. class NDRFloor:
  114.     PROTO_ID = {
  115.         0: 'OSI OID',
  116.         2: 'UUID',
  117.         5: 'OSI TP4',
  118.         6: 'OSI CLNS or DNA Routing',
  119.         7: 'DOD TCP',
  120.         8: 'DOD UDP',
  121.         9: 'DOD IP',
  122.         10: 'RPC connectionless protocol',
  123.         11: 'RPC connection-oriented protocol',
  124.         13: 'UUID',
  125.         2: 'DNA Session Control',
  126.         3: 'DNA Session Control V3',
  127.         4: 'DNA NSP Transport',
  128.         13: 'Netware SPX',
  129.         14: 'Netware IPX',
  130.         15: 'Named Pipes',
  131.         16: 'Named Pipes',
  132.         17: 'NetBIOS',
  133.         18: 'NetBEUI',
  134.         19: 'Netware SPX',
  135.         20: 'Netware IPX',
  136.         22: 'Appletalk Stream',
  137.         23: 'Appletalk Datagram',
  138.         24: 'Appletalk',
  139.         25: 'NetBIOS',
  140.         26: 'Vines SPP',
  141.         27: 'Vines IPC',
  142.         28: 'StreeTalk',
  143.         32: 'Unix Domain Socket',
  144.         33: 'null',
  145.         34: 'NetBIOS' }
  146.     
  147.     def __init__(self, data = ''):
  148.         self._lhs_len = 0
  149.         self._protocol = 0
  150.         self._uuid = ''
  151.         self._rhs_len = 0
  152.         self._rhs = ''
  153.         self._floor_len = 0
  154.         if data != 0:
  155.             (self._lhs_len, self._protocol) = unpack('<HB', data[:3])
  156.             offset = 3
  157.             if self._protocol == 13:
  158.                 self._uuid = data[offset:offset + self._lhs_len - 1]
  159.                 offset += self._lhs_len - 1
  160.             
  161.             self._rhs_len = unpack('<H', data[offset:offset + 2])[0]
  162.             offset += 2
  163.             self._rhs = data[offset:offset + self._rhs_len]
  164.             self._floor_len = offset + self._rhs_len
  165.         
  166.  
  167.     
  168.     def get_floor_len(self):
  169.         return self._floor_len
  170.  
  171.     
  172.     def get_protocol(self):
  173.         return self._protocol
  174.  
  175.     
  176.     def get_rhs(self):
  177.         return self._rhs
  178.  
  179.     
  180.     def get_rhs_len(self):
  181.         return self._rhs_len
  182.  
  183.     
  184.     def get_uuid(self):
  185.         return self._uuid
  186.  
  187.     
  188.     def get_protocol_string(self):
  189.         if NDRFloor.PROTO_ID.has_key(self._protocol):
  190.             return NDRFloor.PROTO_ID[self._protocol]
  191.         else:
  192.             return 'unknown'
  193.  
  194.     
  195.     def get_uuid_string(self):
  196.         if len(self._uuid) == 18:
  197.             version = unpack('<H', self._uuid[16:18])[0]
  198.             return '%s version: %d' % (parse_uuid(self._uuid), version)
  199.         else:
  200.             return ''
  201.  
  202.  
  203.  
  204. def parse_uuid(_uuid):
  205.     return uuid.bin_to_string(_uuid)
  206.  
  207.  
  208. class NDRTower:
  209.     
  210.     def __init__(self, data = ''):
  211.         self._length = 0
  212.         self._length2 = 0
  213.         self._number_of_floors = 0
  214.         self._floors = []
  215.         self._tower_len = 0
  216.         if data != 0:
  217.             (self._length, self._length2, self._number_of_floors) = unpack('<LLH', data[:10])
  218.             offset = 10
  219.             for i in range(0, self._number_of_floors):
  220.                 self._floors.append(NDRFloor(data[offset:]))
  221.                 offset += self._floors[i].get_floor_len()
  222.             
  223.             self._tower_len = offset
  224.         
  225.  
  226.     
  227.     def get_tower_len(self):
  228.         return self._tower_len
  229.  
  230.     
  231.     def get_floors(self):
  232.         return self._floors
  233.  
  234.     
  235.     def get_number_of_floors(self):
  236.         return self._number_of_floors
  237.  
  238.  
  239.  
  240. class NDREntry:
  241.     
  242.     def __init__(self, data = ''):
  243.         self._objectid = ''
  244.         self._entry_len = 0
  245.         self._tower = 0
  246.         self._referent_id = 0
  247.         self._annotation_offset = 0
  248.         self._annotation_len = 0
  249.         self._annotation = ''
  250.         if data != 0:
  251.             self._objectid = data[:16]
  252.             self._referent_id = unpack('<L', data[16:20])[0]
  253.             (self._annotation_offset, self._annotation_len) = unpack('<LL', data[20:28])
  254.             self._annotation = data[28:28 + self._annotation_len - 1]
  255.             if self._annotation_len % 4:
  256.                 self._annotation_len += 4 - self._annotation_len % 4
  257.             
  258.             offset = 28 + self._annotation_len
  259.             self._tower = NDRTower(data[offset:])
  260.             self._entry_len = offset + self._tower.get_tower_len()
  261.         
  262.  
  263.     
  264.     def get_entry_len(self):
  265.         if self._entry_len % 4:
  266.             self._entry_len += 4 - self._entry_len % 4
  267.         
  268.         return self._entry_len
  269.  
  270.     
  271.     def get_annotation(self):
  272.         return self._annotation
  273.  
  274.     
  275.     def get_tower(self):
  276.         return self._tower
  277.  
  278.     
  279.     def get_uuid(self):
  280.         binuuid = self._tower.get_floors()[0].get_uuid()
  281.         return binuuid[:16]
  282.  
  283.     
  284.     def get_objuuid(self):
  285.         return self._objectid
  286.  
  287.     
  288.     def get_version(self):
  289.         binuuid = self._tower.get_floors()[0].get_uuid()
  290.         return unpack('<H', binuuid[16:18])[0]
  291.  
  292.     
  293.     def print_friendly(self):
  294.         if self._tower != 0:
  295.             floors = self._tower.get_floors()
  296.             print 'IfId: %s [%s]' % (floors[0].get_uuid_string(), uuid_to_exe(floors[0].get_uuid()))
  297.             if self._annotation:
  298.                 print 'Annotation: %s' % self._annotation
  299.             
  300.             print 'UUID: %s' % parse_uuid(self._objectid)
  301.             print 'Binding: %s' % self.get_string_binding()
  302.             print ''
  303.         
  304.  
  305.     
  306.     def get_string_binding(self):
  307.         if self._tower != 0:
  308.             tmp_address = ''
  309.             tmp_address2 = ''
  310.             floors = self._tower.get_floors()
  311.             num_floors = self._tower.get_number_of_floors()
  312.             for i in range(3, num_floors):
  313.                 if floors[i].get_protocol() == 7:
  314.                     tmp_address = 'ncacn_ip_tcp:%%s[%d]' % unpack('!H', floors[i].get_rhs())
  315.                     continue
  316.                 None if floors[i].get_protocol() == 8 else tmp_address != ''
  317.                 None if floors[i].get_protocol() == 12 else tmp_address != ''
  318.                 if floors[i].get_protocol() == 14:
  319.                     tmp_address = 'ncadg_ipx:~%%s[%d]' % unpack('!H', floors[i].get_rhs())
  320.                     continue
  321.                 if floors[i].get_protocol() == 15:
  322.                     tmp_address = 'ncacn_np:%%s[%s]' % floors[i].get_rhs()[:floors[i].get_rhs_len() - 1]
  323.                     continue
  324.                 None if floors[i].get_protocol() == 16 else tmp_address != ''
  325.                 if floors[i].get_protocol() == 31:
  326.                     tmp_address = 'ncacn_http:%%s[%d]' % unpack('!H', floors[i].get_rhs())
  327.                     continue
  328.                 if floors[i].get_protocol_string() == 'unknown':
  329.                     return 'unknown_proto_0x%x:[0]' % floors[i].get_protocol()
  330.                     continue
  331.                 if floors[i].get_protocol_string() != 'UUID':
  332.                     return 'protocol: %s, value: %s' % (floors[i].get_protocol_string(), floors[i].get_rhs())
  333.                     continue
  334.             
  335.         
  336.  
  337.  
  338.  
  339. class NDREntries:
  340.     
  341.     def __init__(self, data = ''):
  342.         self._max_count = 0
  343.         self._offset = 0
  344.         self._actual_count = 0
  345.         self._entries_len = 0
  346.         self._entries = []
  347.         if data != 0:
  348.             (self._max_count, self._offset, self._actual_count) = unpack('<LLL', data[:12])
  349.             self._entries_len = 12
  350.             for i in range(0, self._actual_count):
  351.                 self._entries.append(NDREntry(data[self._entries_len:]))
  352.                 self._entries_len += self._entries[i].get_entry_len()
  353.             
  354.         
  355.  
  356.     
  357.     def get_max_count(self):
  358.         return self._max_count
  359.  
  360.     
  361.     def get_offset(self):
  362.         return self._offset
  363.  
  364.     
  365.     def get_actual_count(self):
  366.         return self._actual_count
  367.  
  368.     
  369.     def get_entries_len(self):
  370.         return self._entries_len
  371.  
  372.     
  373.     def get_entry(self):
  374.         return self._entries[0]
  375.  
  376.  
  377.  
  378. class NDRPointer:
  379.     
  380.     def __init__(self, data = '', pointerType = None):
  381.         self._referent_id = random.randint(0, 65535)
  382.         self._pointer = None
  383.         if data != '':
  384.             self._referent_id = unpack('<L', data[:4])[0]
  385.             self._pointer = pointerType(data[4:])
  386.         
  387.  
  388.     
  389.     def set_pointer(self, data):
  390.         self._pointer = data
  391.  
  392.     
  393.     def get_pointer(self):
  394.         return self._pointer
  395.  
  396.     
  397.     def rawData(self):
  398.         return pack('<L', self._referent_id) + self._pointer.rawData()
  399.  
  400.  
  401.  
  402. class NDRString:
  403.     
  404.     def __init__(self, data = ''):
  405.         self._string = ''
  406.         self._max_len = 0
  407.         self._offset = 0
  408.         self._length = 0
  409.         if data != '':
  410.             (self._max_len, self._offset, self._length) = unpack('<LLL', data[:12])
  411.             self._string = unicode(data[12:12 + self._length * 2], 'utf-16le')
  412.         
  413.  
  414.     
  415.     def get_string(self):
  416.         return self._string
  417.  
  418.     
  419.     def set_string(self, str):
  420.         self._string = str
  421.         self._max_len = self._length = len(str) + 1
  422.  
  423.     
  424.     def rawData(self):
  425.         if self._length & 1:
  426.             self._tail = pack('<HH', 0, 0)
  427.         else:
  428.             self._tail = pack('<H', 0)
  429.         return pack('<LLL', self._max_len, self._offset, self._length) + self._string.encode('utf-16le') + self._tail
  430.  
  431.     
  432.     def get_max_len(self):
  433.         return self._max_len
  434.  
  435.     
  436.     def get_length(self):
  437.         return self._length
  438.  
  439.  
  440.